<template>
  <view class="content"></view>
</template>

<script>
// ✅ 引入新插件
const Xdserialport = uni.requireNativePlugin('Xd-serialPort');

export default {
  data() {
    return {
      readInterval: null, // 存储轮询定时器
      devicePath: '/dev/ttyS1',     // 与旧代码一致
      baudRate: 115200,             // 与旧代码一致
    };
  },

  created() {
    // ✅ 测试插件是否引入成功（可选，用于调试）
    this.testPlugin();

    // ✅ 延迟打开串口，避免初始化过快
    setTimeout(() => {
      this.open();
    }, 800);
  },

  methods: {
    // 测试插件（调试用）
    testPlugin() {
      Xdserialport.testPlugin((res) => {
        console.log('🔧 Xd-serialPort 插件测试:', res);
      });
    },

    // 打开串口
    open() {
      if (!Xdserialport) {
        console.error('❌ 插件 Xd-serialPort 未正确引入');
        return;
      }

      console.log(`🔧 正在打开串口: ${this.devicePath}, 波特率: ${this.baudRate}`);
      // ✅ 使用新 API 打开串口
      Xdserialport.openSerialPort(this.devicePath, this.baudRate, (res) => {
		  
        if (!res.status) {
          console.error('❌ 串口打开失败:', res.msg || '未知错误');
          return;
        }

        console.log('✅ 串口打开成功');
        this.onSwip(); // 成功后开始监听数据
      });
    },

    // 开始监听串口数据（替换 onMessageHex）
    onSwip() {
      // 清除旧定时器，防止重复启动
      if (this.readInterval) {
        clearInterval(this.readInterval);
      }

      // ✅ 使用定时器模拟“持续读取”
      this.readInterval = setInterval(() => {
        Xdserialport.getPortData((res) => {
          if (res.status && res.data) {
            const rec = res.data.trim(); // 获取 HEX 字符串

            // ✅ 解析卡号：取 8~16 位 HEX，转十进制，补足10位
            if (rec.length >= 16) {
              const hexPart = rec.substring(8, 16);
              const cardNum = String(parseInt(hexPart, 16)); // 16进制转10进制
              const code = cardNum.padStart(10, '0'); // 补0到10位

              console.log('💳 读取到卡号:', code);

              // ✅ 触发全局事件（与旧逻辑一致）
              uni.$emit('scancodedate', { code });
            } else {
              console.warn('⚠️ 数据过短，无法解析:', rec);
            }
          }
          // else: 无数据或失败，不处理
        });
      }, 1000); // 每秒读取一次（可根据设备响应调整）
    },

    // 发送指令（可选：如果你需要主动发指令触发读卡）
    sendCommand(hexCommand) {
      Xdserialport.sendPacket(hexCommand);
      console.log('📤 发送指令:', hexCommand);
    }
  },

  // 页面隐藏时关闭串口
  onHide() {
    Xdserialport.closeSerialPort((res) => {
      console.log('🔌 串口关闭:', res);
    });

    // 清除定时器
    if (this.readInterval) {
      clearInterval(this.readInterval);
      this.readInterval = null;
    }
  },

  // 页面卸载时同样处理
  onUnload() {
    this.onHide(); // 复用关闭逻辑
  }
};
</script>

<style>
</style>